﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace VideoLink.Frames
{
    /// <summary>
    /// Представляет фрагмент видео.
    /// Используется при передаче видео в виде единого файла.
    /// </summary>
    [Serializable]
    public class VideoFragment : StreamData
    {
        #region Public properties

        /// <summary>
        /// Максимальная длина одного фрагмента в байтах
        /// </summary>
        public const long MaxFragmentLength = 5 * 1024 * 1024;

        /// <summary>
        /// Содержимое данного фрагмента файла с видео
        /// </summary>
        public byte[] Data { get; private set; }

        /// <summary>
        /// Порядковый номер фрагмента. Нумерация - с нуля.
        /// </summary>
        public int SequenceNumber { get; private set; }

        /// <summary>
        /// Количество фрагментов, на которые разбит исходный файл.
        /// </summary>
        public int TotalFragments { get; private set; }

        /// <summary>
        /// Показывает, является ли данный фрагмент последним
        /// </summary>
        public bool IsLast
        {
            get
            {
                return SequenceNumber == (TotalFragments - 1);
            }
        }

        #endregion

        /// <summary>
        /// Создать экземпляр класса с пустым Data
        /// </summary>
        public VideoFragment() 
            : base()
        {
            Data = new byte[0];
        }

        /// <summary>
        /// Создать экземпляр класса с указанным Data
        /// </summary>
        /// <param name="data">Содержимое исходного файла с видео</param>
        /// <param name="seqNum">
        /// Порядковый номер данного фрагмента в исходном файле.
        /// Нумерация - с нуля
        /// </param>
        /// <param name="total">
        /// Общее количество фрагментов в исходном файле
        /// </param>
        public VideoFragment(int seqNum, int total, params byte[] data)
            : this()
        {
            SequenceNumber = seqNum;
            TotalFragments = total;
            this.Data = data;
        }
    }
}
